﻿namespace TemplateMethodPattern
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建一个菠菜实例 并调用模板方法
            Spinach spinach = new Spinach();
            spinach.CookVegetabel();
            Console.Read();
        }
    }

    public abstract class Vegetabel
    {
        public void CookVegetabel()
        {
            Console.WriteLine("炒蔬菜的一般做法");
            this.PourOil();
            this.HeatOil();
            this.PourVegetabel();
            this.StirFry();
        }

        // 第一步 倒油
        public void PourOil()
        {
            Console.WriteLine("倒油");
        }

        // 把油烧热
        public void HeatOil()
        {
            Console.WriteLine("把油烧热");
        }

        // 油热了之后倒蔬菜下去，具体哪种蔬菜由之类决定
        public abstract void PourVegetabel();

        // 开发翻炒蔬菜
        public void StirFry()
        {
            Console.WriteLine("翻炒");
        }
    }

    // 菠菜
    public class Spinach : Vegetabel
    {
        public override void PourVegetabel()
        {
            Console.WriteLine("倒菠菜进锅中");
        }
    }

    // 白菜
    public class ChineseCabbage : Vegetabel
    {
        public override void PourVegetabel()
        {
            Console.WriteLine("倒大白菜进锅中");
        }
    }
}
